package com.test.controller;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.test.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.text.SimpleDateFormat;

@Controller
@RequestMapping("/user")
public class UserController {
    @RequestMapping(value="/j1",produces = "application/json;charset=utf-8")
    @ResponseBody  //它不会走视图解析器了。会直接返回一个字符串
    public String jsonTest1() throws JsonProcessingException {
        // jackson  ObjectMapper
        ObjectMapper mapper = new ObjectMapper();
        // 通过jackson让时间戳自动格式化成相应的格式
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        mapper.setDateFormat(sdf);
        User user = new User(2,"小明",20);
        mapper.writeValueAsString(user);
        return "hello";
    }

    @GetMapping("/t1")
    //   /user/t1?name=XXX
    public String test1(@RequestParam("username") String name, Model model){
        //接收前端参数
        System.out.println("接收的参数为:" + name);
        //将返回的结果传递给前端
        model.addAttribute("msg",name);
        return "hello";
    }
    // 前端提交的是一个对象: id, name, age
    //   /user/t2?name=XXX&age=XXX&id=XXX
    /*需要字段的名称和类的属性名称一样，如果不一致的话 ， 就会返回null*/
    @GetMapping("/t2")
    public String test2(User user){
        System.out.println(user);
        return "hellp";
    }

    //Model  只有寥寥几个方法只适用于存储数据，简化了新手对于Model对象的操作和理解
    //ModelMap 继承了LinkedMap，除了实现了自身的一些方法，同样的继承LinkedMap的方法和特性
    //ModelAndView 可以在储存数据的同事，可以进行设置返回的逻辑和视图，进行控制展示层的跳转
    public String test3(ModelMap modelMap){
        return "hello";
    }

}
